const gchar *job_name)
{
GtkPrintOperationPrivate *priv;
- gchar *end;
g_return_if_fail (GTK_IS_PRINT_OPERATION (op));
g_return_if_fail (job_name != NULL);
priv = op->priv;
- g_free (priv->job_name);
- /*
- * according to http://datatracker.ietf.org/doc/rfc2911/,
- * job names MUST NOT exceed 255 (MAX) octets.
- *
- * CUPS will not print jobs with names exceeding 255 chars.
- */
- if (strlen (job_name) > 255)
- {
- end = g_utf8_find_prev_char (job_name, job_name + 255);
- priv->job_name = g_utf8_substring (job_name,
- 0,
- g_utf8_pointer_to_offset (job_name,
- end));
- }
- else
- {
- priv->job_name = g_strdup (job_name);
- }
+ if (g_strcmp0 (priv->job_name, job_name) == 0)
+ return;
+ g_free (priv->job_name);
+ priv->job_name = g_strdup (job_name);
g_object_notify (G_OBJECT (op), "job-name");
}
NULL, printer_absolute_uri);
title = gtk_print_job_get_title (job);
- if (title)
+ if (title) {
+ char *title_truncated = NULL;
+ size_t title_bytes = strlen (title);
+
+ if (title_bytes >= IPP_MAX_NAME)
+ {
+ gchar *end;
+
+ end = g_utf8_find_prev_char (title, title + IPP_MAX_NAME - 1);
+ title_truncated = g_utf8_substring (title,
+ 0,
+ g_utf8_pointer_to_offset (title, end));
+ }
+
gtk_cups_request_ipp_add_string (request, IPP_TAG_OPERATION,
IPP_TAG_NAME, "job-name",
- NULL, title);
+ NULL,
+ title_truncated ? title_truncated : title);
+ g_free (title_truncated);
+ }
options_data = g_new0 (CupsOptionsData, 1);
options_data->request = request;